package edu.ptu.springboot04.common.controller;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 统一REST API响应格式封装类
 *
 * @BelongsProject: springboot04
 * @BelongsPackage: edu.ptu.springboot04.common.controller
 * @Author: HYJ
 * @CreateTime: 2025-03-21  21:49
 * @Description: 标准化响应格式，包含以下要素：
 * - code: HTTP状态码
 * - msg: 业务提示信息
 * - data: 响应数据主体
 * @Version: 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AjaxResponse {
    // HTTP状态码（200=成功，401=未授权，500=服务器错误）
    private Integer code;
    // 业务提示信息
    private String msg;
    // 响应数据主体
    private Object data;

    /**
     * 构建未授权响应
     *
     * @param msg 授权相关的错误信息
     * @return 401 状态码的响应对象
     */
    public static AjaxResponse authError(String msg) {
        return new AjaxResponse(401, msg, null);
    }

    /**
     * 构建成功响应（默认消息）
     *
     * @param data 需要返回的数据
     * @return 200 状态码的响应对象
     */
    public static AjaxResponse success(Object data) {
        return new AjaxResponse(200, "success", data);
    }

    /**
     * 构建带自定义消息的成功响应
     *
     * @param msg  自定义成功消息
     * @param data 需要返回的数据
     * @return 200 状态码的响应对象
     */
    public static AjaxResponse success(String msg, Object data) {
        return new AjaxResponse(200, msg, data);
    }

    /**
     * 构建服务器错误响应
     *
     * @param msg 错误描述信息
     * @return 500 状态码的响应对象
     */
    public static AjaxResponse failure(String msg) {
        return new AjaxResponse(500, msg, null);
    }
}
